// 文件名称：app.js
// 完整保存路径：miniprogram/app.js
// 功能说明：小程序入口文件，支持自动环境检测
// 使用说明：初始化小程序，设置全局数据，自动适配开发/生产环境

App({

  onShow() {
    // 小程序显示时执行
    console.log('小程序显示');
  },

  onHide() {
    // 小程序隐藏时执行
    console.log('小程序隐藏');
  },

  onError(error) {
    // 小程序错误处理
    console.error('小程序错误:', error);
  },

  /**
   * 初始化网络状态监听
   */
  initNetworkListener() {
    wx.getNetworkType({
      success: (res) => {
        this.globalData.networkType = res.networkType;
        console.log('当前网络类型:', res.networkType);
      }
    });

    wx.onNetworkStatusChange((res) => {
      this.globalData.networkType = res.networkType;
      this.globalData.isConnected = res.isConnected;
      
      console.log('网络状态变化:', res.networkType, res.isConnected);
      
      // 通知数据同步服务网络状态变化
      const { dataSyncService } = require('./utils/sync');
      dataSyncService.onNetworkChange(res.isConnected);
    });
  },

  /**
   * 获取API基础地址
   * 智能环境检测：优先读取本地配置，然后判断是否启动了本地服务器
   */
  getApiBaseUrl() {
    // 尝试读取本地存储的环境配置
    try {
      const envConfig = wx.getStorageSync('environment_config');
      if (envConfig && envConfig.apiBaseUrl) {
        console.log('使用本地配置的API地址:', envConfig.apiBaseUrl);
        return envConfig.apiBaseUrl;
      }
    } catch (error) {
      console.log('读取本地环境配置失败:', error);
    }
    
    // 默认使用生产环境，除非明确设置为开发环境
    const isDevelopment = wx.getStorageSync('use_development_env') === true;
    
    if (isDevelopment) {
      console.log('使用开发环境API地址');
      return 'http://localhost:5000/api/miniprogram';
    } else {
      console.log('使用生产环境API地址');
      return 'https://vision.skyantkj.com/api/miniprogram';
    }
  },

  globalData: {
    userInfo: null,     // 全局用户信息
    token: null,        // JWT令牌
    openid: null,       // 微信openid
    studentInfo: null,  // 绑定的学生信息
    networkType: 'unknown', // 网络类型
    isConnected: true,  // 是否连接网络
    apiBaseUrl: null    // 后端API基础地址，通过getApiBaseUrl()动态获取
  },

  onLaunch() {
    // 小程序初始化时执行
    console.log('小程序初始化完成');
    
    // 默认设置为生产环境（除非有特殊配置）
    if (!wx.getStorageSync('environment_set')) {
      wx.setStorageSync('use_development_env', false);
      wx.setStorageSync('environment_set', true);
      console.log('首次启动，设置为生产环境');
    }
    
    // 设置API基础地址
    this.globalData.apiBaseUrl = this.getApiBaseUrl();
    console.log('API基础地址:', this.globalData.apiBaseUrl);
    
    // 初始化数据同步服务
    const { initSyncService } = require('./utils/sync');
    initSyncService();
    
    // 监听网络状态变化
    this.initNetworkListener();
  },

  /**
   * 手动切换环境（用于调试）
   */
  switchEnvironment(isDevelopment = false) {
    wx.setStorageSync('use_development_env', isDevelopment);
    this.globalData.apiBaseUrl = this.getApiBaseUrl();
    console.log('环境已切换到:', isDevelopment ? '开发环境' : '生产环境');
    console.log('新的API地址:', this.globalData.apiBaseUrl);
    
    // 提示用户重启小程序
    wx.showModal({
      title: '环境切换成功',
      content: '请重新启动小程序以使环境配置生效',
      showCancel: false
    });
  },

  onShow() {
    // 小程序显示时执行
    console.log('小程序显示');
  },

  onHide() {
    // 小程序隐藏时执行
    console.log('小程序隐藏');
  },

  onError(error) {
    // 小程序错误处理
    console.error('小程序错误:', error);
  }
});